package com.i2bt.util;

import java.util.Stack;

/**
 * 
 * Title : 路径字符串操作类
 *
 * Description : 连接、分解
 *
 * CreatedTime : 2014年10月11日
 *
 * @author Flame
 *
 * @version 1.0
 *
 */
public class PathStack {
	/**
	 * 分隔符
	 */
	private String pathSeparation = null;
	
	/**
	 * 存储每个路径的字符串
	 */
	private Stack<String> pathStack = null;
	
	/**
	 * 是否存储文件的标记
	 */
	private boolean isFile = false;
	
	/**
	 * 初始化分隔符和路径栈
	 */
	public PathStack(String pathSeparation) {
		this.pathSeparation = pathSeparation;
		pathStack = new Stack<String>();
	}
	
	/**
	 * 通过连接路径返回路径字符串
	 * @return 当前路径
	 */
	public String getPath() {
		// 当前栈的完整路径
		String path = "";
		
		// 遍历栈并通过分隔符连接路径字符串
		for (int i = 0; i < pathStack.size(); i++) {
			path += pathStack.elementAt(i) + pathSeparation;
		}
		
		// 截取字符串的起点和终点索引
		int start = 0;
		int end = path.length() - pathSeparation.length();
		
		// 移除最后一个分隔符
		path = path.substring(start, end);
		
		return path;
	}
	
	/**
	 * 进入一层路径时将路径名入栈
	 * @param path 文件夹路径名
	 */
	public void addParentPath(String path) {
		this.pathStack.push(path);
	}
	
	/**
	 * 文件名作为路径
	 * @param path 文件名路径
	 */
	public void addFilePath(String path) {
		this.pathStack.push(path);
		
		this.isFile = true;
	}
	
	/**
	 * 将当前路径出栈
	 */
	public void removePath() {
		this.pathStack.pop();
		
		// 如果栈的顶部为文件则再次移除
		if (isFile) {
			this.pathStack.pop();
			isFile = false;
		}
	}
	
	/**
	 * 清空路径栈
	 */
	public void clearPath() {
		this.pathStack.clear();
	}
	
	/**
	 * 路径栈返回倒序数组
	 * @return 栈的顶部
	 */
	public String[] getPathSeq() {
		String[] fileName = new String[this.pathStack.size()];
		
		for (int i = fileName.length - 1; i <= 0; i++) {
			fileName[i] = this.pathStack.elementAt(i);
		}
		
		return fileName;
	}
}
